package dominio;
import java.util.Random;

import org.omg.CORBA.UserException;

public class Tablero {
	int filas;
	int columnas;
	String[][] miEstructura;
	Dificultad dificultad;
	
	public Tablero(int lasFilas,int lasColumnas){
		this.filas = lasFilas;
		this.columnas = lasColumnas;
	}
	
	public Tablero(String[][] estructura){
		this.miEstructura = estructura;
	}
	

	public int getFilas() {
		return filas;
	}

	public String[][] getMiEstructura() {
		return miEstructura;
	}

	public void setMiEstructura(String[][] miEstructura) {
		this.miEstructura = miEstructura;
	}

	public void setFilas(int filas) {
		this.filas = filas;
	}

	public int getColumnas() {
		return columnas;
	}

	public void setColumnas(int columnas) {
		this.columnas = columnas;
	}

	public void rellenarColumna(int x, String[][] d){
		for(int y = 0; y < this.getColumnas();y++){
			System.out.print("["+x +"]"+"[" +y+"]"+ " = ");
			Caramelo c = dificultad.dameUnCaramelo();
			System.out.print(d[x][y] = c.clone().getColor()+ " | "); 
		}
		System.out.println();
	}
	
	public String[][] armarTableroAleatorio(Dificultad dif){	
		String[][] dimension = new String[this.getFilas()][this.getColumnas()];
		for(int x = 0; x < this.getFilas();x++){
			rellenarColumna(x,dimension);
		}
		return dimension;
	}

	public void mover(int desdeFila, int desdeColumna, int hastaFila, int hastaColumna) {
		intercambiarCaramelos(desdeFila, desdeColumna, hastaFila, hastaColumna);
		if (!hayParaExplotar(this.getFilas(),this.getColumnas()) || !hayParaExplotar(this.getColumnas(),this.getFilas())) {
			intercambiarCaramelos(hastaFila, hastaColumna, desdeFila, desdeColumna);
			//throw new UserException("No produce explosion");
		}
	}
	
	private void explotarCaramelos(int x, int y, int cant){
		while(cant > 0){
			this.getMiEstructura()[x][y] = dificultad.dameUnCaramelo().getColor();
			y--;
			cant--;
		}
	}
	
	private boolean hayParaExplotar(int fila,int col){
		boolean hay = false;
		for(int x = 0; x < fila; x++){
			hay = hay || hayParaExplotarEnDir(x,hay,col);
		}
		return hay;
	}
	
	private boolean hayParaExplotarEnDir(int x,boolean hay, int cols){
		int cant = 1;
		for(int y = 0; y < cols-1;y++){
			if(this.getMiEstructura()[x][y] == this.getMiEstructura()[x][y+1]){
				cant++;
			} else {
				if(cant >= 3){
					hay = true;
					explotarCaramelos(x, y, cant);
				}
			}
		}
		return hay;
	}
	
	protected void intercambiarCaramelos(int desdeFila, int desdeColumna,
			int hastaFila, int hastaColumna) {
		String original = getMiEstructura()[desdeFila][desdeColumna];
		getMiEstructura()[desdeFila][desdeColumna] = getMiEstructura()[hastaFila][hastaColumna];
		getMiEstructura()[hastaFila][hastaColumna] = original;
	}
}